/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.epsi.blokus.joueur;

import org.epsi.blokus.commun.Message;
import org.epsi.blokus.salon.ServerClient;
import org.epsi.blokus.tools.Log;

/**
 * Client dans un jeu en ligne
 * @author julien.lafont
 */
public final class OnlineClient extends Client {

    private ServerClient client;
    private boolean isMaster;

    public OnlineClient(TTypePiece couleur, ServerClient client, boolean isMaster) {
        super(couleur);
        this.client = client;
        this.isMaster = isMaster;
    }

    @Override
    public void isReady(String pseudo, String selectedAvatar) {
        super.isReady(pseudo, selectedAvatar);

        Log.out("Je suis pret : j'envoie mes informations à l'adversaire");
        
        client.envoyer(
                new Message(Message.TTypeMessage.infos_adversaires)
                    .addObject("PSEUDO", pseudo)
                    .addObject("AVATAR", selectedAvatar)
        );
        
        // Relache le sémaphore
        semInitialisationJoueur.release();

    }

    /**
     * Le joueur joue son coup
     * @param x
     * @param y
     */
    public void jouer(int x, int y)
    {
        Log.out("Le joueur a joué "+x+"/"+y+" : on envoie le message");
        envoyerMessageJouerCoup(x, y);
    }

    /**
     * Transmettre le coup au serveur
     * @param col
     * @param lig
     */
    public void envoyerMessageJouerCoup(int col, int lig)
    {
        client.envoyer(
                new Message(Message.TTypeMessage.poser_pion)
                .addObject("COL", col)
                .addObject("LIG", lig)
        );
    }

    /**
     * Le joueur est en timeout
     */
    public void envoyerMessageTimeout()
    {
        client.envoyer(
                new Message(Message.TTypeMessage.timeout)
        );
    }

    /**
     * Le joueur a gagné
     */
    public void envoyerMessageGagnant() {
        client.envoyer(
                new Message(Message.TTypeMessage.gagnant)
        );
    }

    /**
     * Transmettre un message de chat pendant la partie
     * @param text
     */
    public void envoyerChat(String text)
    {
        client.envoyer(
           new Message(Message.TTypeMessage.chat_ingame_poster)
            .addObject("MESSAGE", text)
        );
    }

    /**
     * Indiquer au serveur que les 2 joueurs sont prêts
     */
    public void envoyerMessagePret() {
        client.envoyer(
           new Message(Message.TTypeMessage.nous_sommes_pret)
        );
    }

    /**
     * Le joueur courant est-il le maitre du salon ?
     * @return
     */
    public boolean isMaster()
    {
        return isMaster;
    }







}
